/*
 *  Rayon.cpp
 *  Ray Tracing
 *
 *  Created by Jean-Marc Comby + Romain Dequesne on Sun Apr 11 2004.
 *  Copyright (c) 2004. All rights reserved.
 *
 */

#include "Rayon.hpp"

/**
 * Constructeur standard, permet d'initialiser l'origine et la
 * direction. La version par défaut crée un rayon dont l'origine est
 * en (0,0,0) et parallèle à Ox.
 *
 * @param o origine du Rayon.
 * @param v direction du Rayon.
 */
Rayon::Rayon(const Coord& o, const VecteurU& v)
  : Origine( o ), Direction( v )
{}

/**
 * Constructeur permettant d'initialiser le Rayon avec les deux
 * extrémités du Rayon, est utilisé lors de la détermination de la
 * lumière : on donne alors le point à éclairer et la position de la
 * source.
 *
 * @param o1 origine du Rayon.
 * @param o2 "extrémité" du Rayon.
 */
Rayon::Rayon(const Coord& o1, const Coord& o2)
  : Origine( o1 ), Direction( o1 , o2 )
{}

/**
 * Constructeur permettant d'initialiser le Rayon à partir de deux
 * instances de Vecteur. Est utilisé lorsque l'on veut donner la
 * position avec un Vecteur (résultant de l'addition d'un Coord et
 * d'un Vecteur par exemple).
 *
 * @param v1 origine du Rayon.
 * @param v2 "extrémité" du Rayon.
 */
Rayon::Rayon(const Vecteur& v1, const Vecteur& v2)
  : Origine( static_cast<Coord>( v1 ) ), Direction( v2 )
{}

/**
 * Le destructeur n'a rien de spécial à faire.
 */
Rayon::~Rayon()
{}

/**
 * Permet de récupérer le point d'origine du Rayon.
 *
 * @return une référence constante sur Origine.
 */
const Coord& Rayon::origine() const
{
  return Origine;
}

/**
 * Permet de récupérer la direction du Rayon.
 *
 * @return une référence constante sur Direction.
 */
const VecteurU& Rayon::direction() const
{
  return Direction;
}
